#include "Nodo.h"

/*
	Classe Nodo, responsavel pela criacao dos objetos que serao usados nas arvores para criacao do layout das foto-colagens
*/


/*
	Construtor Default. Inicializa a maioria dos atributos da classe com valores default.
*/
Nodo::Nodo()
{
	dimensaoHoriz = 0;
	dimensaoVert = 0;
	parent = NULL;
	childLeft = NULL;
	childRight = NULL;
	name = "";
}

/*
	Construtor da classe, recebe 6 argumentos como parametro: o nome do no; os nos: pai, filho direito e filho esquerdo; e as dimensoes horizontais e verticais do no corrente.
*/
Nodo::Nodo(string n, Nodo* pa, Nodo* l, Nodo* r, double dimH, double dimV, double aspectR, double areaP)
{
	name = n;
	parent = pa;
	childLeft = l;
	childRight = r;
	dimensaoHoriz = dimH;
	dimensaoVert = dimV;
	aspectRatio = aspectR;
	areaProportion = areaP;
}

/*
	Destrutor default.
*/
Nodo::~Nodo()
{
}

/*
	Procedimento usado para atualizar o nome do no corrente.
*/
void Nodo::setName(string n)
{
	name = n;
}

/*
	Procedimento usado para atualizar o no pai do no corrente.
*/
void Nodo::setParent(Nodo* pa)
{
	parent = pa;
}

/*
	Procedimento usado para atualizar a dimensao horizontal do no corrente.
*/
void Nodo::setDimensaoH(double dimH)
{
	dimensaoHoriz = dimH;
}

/*
	Procedimento usado para atualizar a dimensao vertical do no corrente.
*/
void Nodo::setDimensaoV(double dimV)
{
	dimensaoVert = dimV;
}

/*
	Procedimento usado para atualizar o no filho direito do no corrente.
*/
void Nodo::setChildRight(Nodo* r)
{
	childRight = r;
}


/*
	Procedimento usado para atualizar o no filho esquerdo do no corrente.
*/
void Nodo::setChildLeft(Nodo* l)
{
	childLeft = l;
}

/*
	Funcao que retorna o nome do no corrente.
*/
string Nodo::getName()
{
	return name;
}

/*
	Funcao que retorna o pai do no corrente.
*/
Nodo* Nodo::getParent()
{
	return parent;
}

/*
	Funcao que retorna a dimensao horizontal do no corrente.
*/
double Nodo::getDimensaoH()
{
	return dimensaoHoriz; 
}

/*
	Funcao que retorna a dimensao vertical do no corrente.
*/
double Nodo::getDimensaoV()
{
	return dimensaoVert; 
}

/*
	Procedimento usado para configurar / atualizar o valor da area proportion do no corrente.
*/
void Nodo::setAreaProportion(double e){
	areaProportion = e;
}

/*
	Procedimento usado para configurar / atualizar o valor do aspect ratio do no corrente.
*/
void Nodo::setAspectRatio(double a){
	aspectRatio = a;
}

/*
	Procedimento usado para atualizar a area do nodo corrente.
*/
void Nodo::setAreaNodo(double area){
	nodoArea = area;
}

/*
	Retorna o filho esquerdo do no corrente.
*/
Nodo* Nodo::getChildLeft()
{
	return childLeft;
}

/*
	Retorna o filho direito do no corrente.
*/
Nodo* Nodo::getChildRight()
{
	return childRight;
}

/*
	Funcao que calcula e retorna a area proportion do no corrente.
*/
double Nodo::getAreaProportion()
{
	return areaProportion;
}

/*
	Funcao que calcula e retorna o aspect ratio do no corrente.
*/
double Nodo::getAspectRatio() {
	return aspectRatio;
}

/*
	Funcao que calcula a area do nodo corrente.
*/
double Nodo::getAreaNodo(){
	return nodoArea;
}
